function L3code = generateL3code(PRN)
// generateL3code.sci генерирует одну из 31 ПСП, использующихся в L3 ГЛОНАСС.
//
// L3code = generateL3code(PRN)
//
//   Входные параметры:
//       PRN         - номер генерируемой ПСП.
//
//   Выходные параметры:
//       L3code      - вектор, содержащий отсчеты ПСП.  
//--------------------------------------------------------------------------

  // g1s содержит инициализирующие значения для первого (третьего) 
  // регистра сдвига с обратными связями:
  g1s(1,1:7) = -1*[-1 -1 -1 -1 -1 -1  1];//#01
  g1s(2,1:7) = -1*[-1 -1 -1 -1 -1  1 -1];//#02
  g1s(3,1:7) = -1*[-1 -1 -1 -1 -1  1  1];//#03
  g1s(4,1:7) = -1*[-1 -1 -1 -1  1 -1 -1];//#04
  g1s(5,1:7) = -1*[-1 -1 -1 -1  1 -1  1];//#05
  g1s(6,1:7) = -1*[-1 -1 -1 -1  1  1 -1];//#06
  g1s(7,1:7) = -1*[-1 -1 -1 -1  1  1  1];//#07
  g1s(8,1:7) = -1*[-1 -1 -1  1 -1 -1 -1];//#08
  g1s(9,1:7) = -1*[-1 -1 -1  1 -1 -1  1];//#09
  g1s(10,1:7) = -1*[-1 -1 -1  1 -1  1 -1];//#10
  g1s(11,1:7) = -1*[-1 -1 -1  1 -1  1  1];//#11
  g1s(12,1:7) = -1*[-1 -1 -1  1  1 -1 -1];//#12
  g1s(13,1:7) = -1*[-1 -1 -1  1  1 -1  1];//#13
  g1s(14,1:7) = -1*[-1 -1 -1  1  1  1 -1];//#14
  g1s(15,1:7) = -1*[-1 -1 -1  1  1  1  1];//#15
  g1s(16,1:7) = -1*[-1 -1  1 -1 -1 -1 -1];//#16
  g1s(17,1:7) = -1*[-1 -1  1 -1 -1 -1  1];//#17
  g1s(18,1:7) = -1*[-1 -1  1 -1 -1  1 -1];//#18
  g1s(19,1:7) = -1*[-1 -1  1 -1 -1  1  1];//#19
  g1s(20,1:7) = -1*[-1 -1  1 -1  1 -1 -1];//#20
  g1s(21,1:7) = -1*[-1 -1  1 -1  1 -1  1];//#21
  g1s(22,1:7) = -1*[-1 -1  1 -1  1  1 -1];//#22
  g1s(23,1:7) = -1*[-1 -1  1 -1  1  1  1];//#23
  g1s(24,1:7) = -1*[-1 -1  1  1 -1 -1 -1];//#24
  g1s(25,1:7) = -1*[-1 -1  1  1 -1 -1  1];//#25
  g1s(26,1:7) = -1*[-1 -1  1  1 -1  1 -1];//#26
  g1s(27,1:7) = -1*[-1 -1  1  1 -1  1  1];//#27
  g1s(28,1:7) = -1*[-1 -1  1  1  1 -1 -1];//#28
  g1s(29,1:7) = -1*[-1 -1  1  1  1 -1  1];//#29
  g1s(30,1:7) = -1*[-1 -1  1  1  1  1 -1];//#30
  g1s(31,1:7) = -1*[-1 -1  1  1  1  1  1];//#31
  
  g1s(31,1:7) = -1*[-1  1 -1 -1 -1 -1 -1];//#32 - значение не используется!
  
  g1s(33,1:7) = -1*[-1  1 -1 -1 -1 -1  1];//#33
  g1s(34,1:7) = -1*[-1  1 -1 -1 -1  1 -1];//#34
  g1s(35,1:7) = -1*[-1  1 -1 -1 -1  1  1];//#35
  g1s(36,1:7) = -1*[-1  1 -1 -1  1 -1 -1];//#36
  g1s(37,1:7) = -1*[-1  1 -1 -1  1 -1  1];//#37
  g1s(38,1:7) = -1*[-1  1 -1 -1  1  1 -1];//#38
  g1s(39,1:7) = -1*[-1  1 -1 -1  1  1  1];//#39
  g1s(40,1:7) = -1*[-1  1 -1  1 -1 -1 -1];//#40
  g1s(41,1:7) = -1*[-1  1 -1  1 -1 -1  1];//#41
  g1s(42,1:7) = -1*[-1  1 -1  1 -1  1 -1];//#42
  g1s(43,1:7) = -1*[-1  1 -1  1 -1  1  1];//#43
  g1s(44,1:7) = -1*[-1  1 -1  1  1 -1 -1];//#44
  g1s(45,1:7) = -1*[-1  1 -1  1  1 -1  1];//#45
  g1s(46,1:7) = -1*[-1  1 -1  1  1  1 -1];//#46
  g1s(47,1:7) = -1*[-1  1 -1  1  1  1  1];//#47
  g1s(48,1:7) = -1*[-1  1  1 -1 -1 -1 -1];//#48
  g1s(49,1:7) = -1*[-1  1  1 -1 -1 -1  1];//#49
  g1s(50,1:7) = -1*[-1  1  1 -1 -1  1 -1];//#50
  g1s(51,1:7) = -1*[-1  1  1 -1 -1  1  1];//#51
  g1s(52,1:7) = -1*[-1  1  1 -1  1 -1 -1];//#52
  g1s(53,1:7) = -1*[-1  1  1 -1  1 -1  1];//#53
  g1s(54,1:7) = -1*[-1  1  1 -1  1  1 -1];//#54
  g1s(55,1:7) = -1*[-1  1  1 -1  1  1  1];//#55
  g1s(56,1:7) = -1*[-1  1  1  1 -1 -1 -1];//#56
  g1s(57,1:7) = -1*[-1  1  1  1 -1 -1  1];//#57
  g1s(58,1:7) = -1*[-1  1  1  1 -1  1 -1];//#58
  g1s(59,1:7) = -1*[-1  1  1  1 -1  1  1];//#59
  g1s(60,1:7) = -1*[-1  1  1  1  1 -1 -1];//#60
  g1s(61,1:7) = -1*[-1  1  1  1  1 -1  1];//#61
  g1s(62,1:7) = -1*[-1  1  1  1  1  1 -1];//#62
  g1s(63,1:7) = -1*[-1  1  1  1  1  1  1];//#63

  //--- Генерирование выходной последовательности со второго регистра --------

  //--- Предварительная инициализация массива для ускорения работы функции ---
  g2 = zeros(1, 10230);
  //--- Иницилизация сдвигового второго регистра ---
  reg2 = -1*[-1 -1 1 1 -1 1 -1 -1 1 1 1 -1 -1 -1];
  
  //--- Сгенерировать выход со второго сдвигового регистра -----
  for i=1:10230
    g2(i)       = reg2(14);
    saveBit     = reg2(4)*reg2(8)*reg2(13)*reg2(14);
    reg2(2:14)   = reg2(1:13);
    reg2(1)      = saveBit;
  end
  
  //--- Генерирование выходной последовательности со первого регистра---------

  //--- Предварительная инициализация массива для ускорения работы функции ---
  g1 = zeros(1, 10230);
  //--- Проинициализировать сдвиговый регистр ---
  reg1 = g1s(PRN, 1:7);
  
  //--- Сгенерировать выход с первого сдвигового регистра -----
  for i=1:10230
    g1(i)       = reg1(7);
    saveBit     = reg1(6)*reg1(7);
    reg1(2:7)   = reg1(1:6);
    reg1(1)      = saveBit;
  end
  
  //--- Сформировать итоговую ПСП, перемножив G1 и G2 ------------------------
  L3code = -(g1 .* g2);
  
endfunction
